import java.util.ArrayList;
import java.util.List;
import java.util.Random;

class Card{
    private int rank;
    private String suit;

    public Card(int rank, String suits) {
        this.rank = rank;
        this.suit = suits;
    }

    @Override
    public String toString() {
        return "[" + + rank + ":" +suit  + ']';
    }
}
public class TestDemo11 {
    private static final String []suits={"❤","♠","♦","♣"};
    public static List<Card> buyCard(){
        List<Card>cards=new ArrayList<>();
        for(int i=0;i<4;i++){
            for(int j=1;j<=13;j++){
                String suit=suits[i];
                Card card=new Card(j,suit);
                cards.add(card);
                //上面3个代码可以直接简写成cards.add(new Card(j,suit[i]));
            }
        }return cards;
    }
    public static void shuffle(List<Card>cards){
        int size=cards.size();
        for(int i=size-1;i>0;i--){
            Random random=new Random();
            int rand=random.nextInt(i);
            swap(cards,i,rand);
        }
    }
    public static void swap(List<Card>cards,int i,int rand){
        Card tem=cards.get(i);
        cards.set(i,cards.get(rand));
        cards.set(rand,tem);
    }

    public static void main(String[] args) {
        List<Card>cards=buyCard();
        System.out.println("买牌："+cards);
        shuffle(cards);
        System.out.println("洗牌："+cards);
        System.out.println("揭牌:3个人每人轮流揭牌");
        List<List<Card>>hand=new ArrayList<>();
        ArrayList<Card>hand1=new ArrayList<>();
        ArrayList<Card>hand2=new ArrayList<>();
        ArrayList<Card>hand3=new ArrayList<>();
        hand.add(hand1);
        hand.add(hand2);
        hand.add(hand3);
        for(int i=0;i<5;i++){
            for(int j=0;j<3;j++){
                Card card=cards.remove(0);
                hand.get(j).add(card);
            }
        }
        System.out.println("第一个的牌"+hand1);
        System.out.println("第二人的牌"+hand2);
        System.out.println("第三个的牌"+hand3);
    }
    //给你两个字符串haystack 和 needle ，请你在 haystack 字符串中找出 needle 字符串出现的第一个位置（下标从 0 开始）。如果不存在，则返回 -1 。
    public int strStr(String haystack,String needle){
        if(needle.length()==0){
            return 0;
        }
        int i=0;
        int j=0;
        while(i<haystack.length()&&j<needle.length()){
            if(haystack.charAt(i)==needle.charAt(j)){
                i++;
                j++;
            }else{
                i=i-j+1;
                j=0;
            }
            if(j==needle.length()){
                return i-j;
            }
        }return -1;
    }

    //给定一个字符串，验证它是否是回文串，只考虑字母和数字字符，可以忽略字母的大小写。
    public static boolean isPalindrome(String s) {
        if (s.length() == 0)
            return true;
        int left = 0, right = s.length() - 1;
        while (left < right) {
            //因为题中说了，只考虑字母和数字，所以不是字母和数字的先过滤掉
            while (left < right && !Character.isLetterOrDigit(s.charAt(left)))//isletterOrDigit是字母或者数字则返回true
                left++;
            while (left < right && !Character.isLetterOrDigit(s.charAt(right)))
                right--;
            //然后把两个字符变为小写，在判断是否一样，如果不一样，直接返回false
            if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right)))
                return false;
            left++;
            right--;
        }
        return true;
    }
    public static void main4(String[] args) {
      String ch="abcba";
      boolean ret=isPalindrome(ch);
        System.out.println(ret);
    }
    //第二种方法
    public boolean isPalindrome1(String s){
        if(s.length()==0){
            return false;
        }
       String m=s.toLowerCase();
        for(int i=0, j=s.length()-1;i<j;i++,j--){
            while(i<j&&!Character.isLetterOrDigit(i)){
                i++;
            }
            while(i<j&&Character.isLetterOrDigit(j)){
                j--;
            }
            if(m.charAt(i)!=m.charAt(j)){
                return false;
            }
        }return true;
    }
}
